#include<stdio.h>
#include<string.h>
#include<stdlib.h>

#define NUM 128
#define CMD_NUM 64

int main()
{
	    for( ; ; )
		{
			char command[NUM] = {'0'};
			char* argv[CMD_NUM] = {NULL};
				
		    //1、打印提示符
			printf("[who@hostname dir]# ");
			fflush(stdout);
		
			//2、获取命令字符串
			fgets(command, NUM, stdin);//最后的回车也会读进来
			command[strlen(command) - 1] = '\0';//去掉最后的\n
			
			//3、解析命令字符串
			const char* sep = " ";
			argv[0] = strtok(command, sep);
			int i = 1;
			while(argv[i] = strtok(NULL, sep))
			{
				i++;
			}

			////4、检测是否为内建命令
			//if(strcmp(argv[0], "cd") == 0)
	      	//{
			//	if(argv[1] != NULL)
			//		chdir(argv[1]);
			//									
			//	continue;
			//}
																	        
			//5、执行第三方命令
		    if(fork() == 0)
		    {
				//child
		    	execvp(argv[0], argv);
		    	exit(1);
		    }
		    //father
		    waitpid(-1, NULL, 0);
		}
}


//int main()
//{
//	for( ; ; )
//	{
//		char crr[100] = {'0'};
//		char* argv[100] = {NULL};
//		//1、打印提示符
//		printf("[who]#");
//		fflush(stdout);
//		//2、取到字符串
//		fgets(crr, 100, stdin);//最后的回车也会读进来
//		//printf("get:%s",crr);
//		crr[strlen(crr) - 1] = '\0';
//		//3、处理字符串
//		const char* c = " ";
//		argv[0] = strtok(crr, c);
//		int i = 1;
//		while(argv[i] = strtok(NULL, c))
//		{
//			i++;
//		}
//		//i = 0;
//		//while(argv[i])
//		//{
//		//	printf("%s\n", argv[i]);
//		//	i++;
//		//}
//		
//		//4、创建子进程执行
//		int pid = 0;
//		if(fork() == 0)
//		{
//			execvp(argv[0], argv);
//			printf("execvp error\n");
//			exit(1);
//		}
//
//		waitpid(-1, NULL, 0);
//	}
//	return 0;
//}


